package com.odontosis.view.maladireta;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.odontosis.util.StringUtilsOdontosis;
import com.odontosis.view.OdontosisForm;

public class FormMalaDireta extends OdontosisForm {
	
	private String nomePaciente;
	
	private String dataInicio;
	
	private String dataFim;
	
	public String getDataInicio() {
		return dataInicio;
	}

	public String getDataFim() {
		return dataFim;
	}

	public void setDataInicio(String dataInicio) {
		this.dataInicio = dataInicio;
	}

	public String getNomePaciente() {
		return nomePaciente;
	}

	public void setNomePaciente(String nomePaciente) {
		this.nomePaciente = nomePaciente;
	}

	public void setDataFim(String dataFim) {
		this.dataFim = dataFim;
	}

	@Override
	public ActionErrors validate(ActionMapping mapping,	HttpServletRequest request) {
		ActionErrors errors = new ActionErrors();
		ActionMessages messages = new ActionMessages();
		Collection<String> erros = null;
		
		if(!StringUtilsOdontosis.isVazia(getMetodo())) {
			if(getMetodo().equals("imprimir") || getMetodo().equals("visualizar")) {
				if(StringUtilsOdontosis.isVazia(getDataInicio())) {
					messages.add("datainicio", new ActionMessage("O campo \"Data Inicial\" deve ser informado."));
				} else if(!StringUtilsOdontosis.isDateValid(getDataInicio()))  {
					messages.add("datainicio", new ActionMessage("O campo \"Data Inicial\" deve não é uma data válida."));
				}
				
				
				if(StringUtilsOdontosis.isVazia(getDataFim())) {
					messages.add("login", new ActionMessage("O campo \"Data Final\" deve ser informado."));
				} else if(!StringUtilsOdontosis.isDateValid(getDataFim())) {
					messages.add("datainicio", new ActionMessage("O campo \"Data Final\" deve não é uma data válida."));
				}
			
			
				if(messages.isEmpty()) {
					if(!StringUtilsOdontosis.isVazia(getDataInicio()) && !StringUtilsOdontosis.isVazia(getDataFim())) {
						Date inicio = StringUtilsOdontosis.StringToDate(getDataInicio()); 
						Date fim = StringUtilsOdontosis.StringToDate(getDataFim());
						if(inicio.getTime() > fim.getTime()) {
							messages.add("datainicio", new ActionMessage("O campo \"Data Inicial\" deve ser menor ou igual ao campo \"Data Final\"."));
						}
					}
				}
			}
		}
		
		if (messages.size() > 0 && getMetodo() != null) {
			errors.add(messages);
			erros = new ArrayList<String>();
			for (Iterator iterator = messages.get(); iterator.hasNext();) {
				ActionMessage string = (ActionMessage) iterator.next();
				erros.add(string.getKey());
			}
			request.setAttribute("mensagens", erros);
			return errors;
		} else {
			request.setAttribute("mensagens", null);
			return super.validate(mapping, request);
		}

	}
}
